const OpenAI = require('openai');

class QianwenService {
  constructor() {
    // 验证必要的环境变量
    if (!process.env.DASHSCOPE_API_KEY) {
      throw new Error('DASHSCOPE_API_KEY 环境变量未设置');
    }

    // 创建 OpenAI 兼容客户端
    this.client = new OpenAI({
      apiKey: process.env.DASHSCOPE_API_KEY,
      baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1'
    });
  }

  /**
   * 生成卡片内容
   * @param {string} prompt - 生成提示词
   * @returns {Promise<string>} 生成的HTML内容
   * @throws {Error} 当生成失败时抛出错误
   */
  async generateContent(prompt) {
    // 参数验证
    if (!prompt || typeof prompt !== 'string') {
      throw new Error('提示词不能为空且必须是字符串类型');
    }
    if (prompt.length > 2000) {
      throw new Error('提示词长度不能超过2000字符');
    }

    try {
      const completion = await this.client.chat.completions.create({
        model: 'qwen-plus',  // 使用 qwen-plus 模型
        messages: [
          {
            role: 'system',
            content: '你是一个专业的AI助手，擅长生成结构化的知识卡片内容。请根据用户的需求生成HTML格式的卡片内容。'
          },
          {
            role: 'user',
            content: prompt
          }
        ],
        temperature: 0.7,
        max_tokens: 2000
      });

      if (!completion.choices?.[0]?.message?.content) {
        throw new Error('API返回的数据格式不正确');
      }

      return completion.choices[0].message.content;
    } catch (error) {
      // 错误类型处理
      if (error.response) {
        // API 返回错误
        const status = error.response.status;
        const data = error.response.data;
        
        switch (status) {
          case 401:
            throw new Error('API认证失败，请检查API密钥是否正确');
          case 429:
            throw new Error('API调用频率超限，请稍后重试');
          case 400:
            throw new Error(`请求参数错误: ${data.error?.message || '未知错误'}`);
          case 500:
            throw new Error('千问API服务异常，请稍后重试');
          default:
            throw new Error(`API请求失败(${status}): ${data.error?.message || '未知错误'}`);
        }
      } else if (error.request) {
        // 请求发送失败
        throw new Error('网络请求失败，请检查网络连接');
      } else {
        // 其他错误
        console.error('Qianwen API Error:', error);
        throw new Error('生成内容时发生未知错误，请稍后重试');
      }
    }
  }
}

module.exports = new QianwenService(); 